#!/usr/bin/env bash
# main.sh的根等级。
TreeBootMainLevel=3
# main.sh中首层调用函数的根等级。
TreeBootFuncLevel=4
# 根据函数父子关系，以树装结构打印调试信息。
tree_echo_enable()
{
    # 这里设置根所在的函数，默认TreeBootFuncLevel。
    export TreeBootLevel=TreeBootFuncLevel
}

# 取消树装打印调试信息。
tree_echo_disable()
{
    unset TreeBootLevel
}

#打印树。
TreeMap()
{
    if [[ ${TreeBootLevel} ]]; then
        # 树枝的标记。
        tree_icon="|_"
        TreeLevel=$[${#FUNCNAME[@]}-${TreeBootLevel}];
        TreeOffset=$[${TreeLevel}*(${#tree_icon}+1)]
        if [[ ${TreeOffset} > 0 ]]; then
            for ((i=1; i<=${TreeOffset}; i++)); do 
                echo -n " ";
            done
            echo -n "${tree_icon} "
        fi
    fi
    return 0
}

# 错误输出，红色文字通过便准错误输出打印。
error_echo()
{
    echo -e "\033[31m $*\033[0m"  >&2
    return 0
}

# 调试输出，黄色文字通过便准错误输出打印。
debug_echo()
{
    case "${DEBUG_LEVEL}" in
      nothing) ;;
      message) echo -e "\033[33m$(TreeMap)$*\033[0m"  >&2;;
      info) echo -e "\033[33m$(TreeMap)[${FUNCNAME[1]}]: $*\033[0m"  >&2;;
    esac
    return 0
}

# 简单的格式化并打印帮助信息。
help_print()
{
    [[ "$1" == "" || "$2" == "" ]] && return 0
    printf "    %-30s %-s\n" "$1" "$2"
    return 0;
}